// 'use strict'
var num = 20;

const obj = {
    num: 10,
    func: (num) => {
        // 箭头函数，this指向函数声明时所在环境的this
        // 浏览器指向window，node指向exports
        this.num += 5;
        // 浏览器 25
        // node NaN
        console.log(this.num);

        // var num = 30; num先提升到当前作用域顶部，然后被传入的参数赋值为40
        num += 5;
        // 45
        console.log(num);
        // num被再次赋值为30
        var num = 30;

        // 产生闭包
        return function () {
            // 函数直接执行
            // this 浏览器指向window，node指向global
            // 严格模式下this指向undefined,执行到这一步会报错
            // 浏览器 29
            // node NaN

            this.num += 4;
            console.log(this.num);
            // num沿作用域链找到30
            num += 10;
            // 40
            console.log(num);
        }
    }
}

obj.func(40)()